home *** CD-ROM | disk | FTP | other *** search
-
- incdir "include:"
-
- include "exec/execbase.i"
- include "dos/dos.i"
- include "dos/dostags.i"
- include "lvo/LVOs.i"
-
- main:
- move.l (4).w,d4
- lea.l (_dos_name,pc),a1
- moveq #37,d0
- movea.l d4,a6
- jsr (_LVOOpenLibrary,a6)
- move.l d0,d5
- bne.b .dosok
- moveq #RETURN_FAIL,d0
- rts
-
- .dosok
- lea.l (_template,pc),a0
- move.l a0,d1
- lea.l (_minStack,pc),a0
- move.l a0,d2
- moveq #0,d3
- movea.l d5,a6
- jsr (_LVOReadArgs,a6)
- movea.l d0,a3
-
-
- movea.l d4,a6
- jsr (_LVOForbid,a6)
- move.l #(_end-_start),d0
- moveq #0,d1
- jsr (_LVOAllocMem,a6)
- tst.l d0
- bne.b .memok
- moveq #RETURN_FAIL,d6
- moveq #ERROR_NO_FREE_STORE,d7
- bra.b .exit
-
- .memok
- lea.l (_start,pc),a0
- movea.l d0,a1
- movea.l d0,a4
- move.l #(_end-_start),d0
- jsr (_LVOCopyMemQuick,a6)
-
-
- movea.l d5,a1
- addq #1,(LIB_OPENCNT,a1)
- lea.l (newCreateProc-_start,a4),a0
- move.l a0,d0
- movea.w #_LVOCreateProc,a0
- jsr (_LVOSetFunction,a6)
- move.l d0,(oldCreateProc-_start+2,a4)
-
-
- movea.l d5,a1
- lea.l (newCreateNewProc-_start,a4),a0
- move.l a0,d0
- movea.w #_LVOCreateNewProc,a0
- jsr (_LVOSetFunction,a6)
- move.l d0,(oldCreateNewProc-_start+2,a4)
-
-
- movea.l d5,a1
- lea.l (newRunCommand-_start,a4),a0
- move.l a0,d0
- movea.w #_LVORunCommand,a0
- jsr (_LVOSetFunction,a6)
- move.l d0,(oldRunCommand-_start+2,a4)
-
-
- movea.l (_minStack,pc),a0
- cmpa.w #0,a0
- beq.b .nomin
- move.l (a0),d0
- addq #3,d0
- andi.b #%11111100,d0
- lea.l (minStack-_start,a4),a1
- move.l d0,(a1)
-
- .nomin
- moveq #RETURN_OK,d6
- moveq #0,d7
-
- .exit
- jsr (_LVOPermit,a6)
- movea.l d5,a6
- move.l a3,d1
- beq.b .noargs
- jsr (_LVOFreeArgs,a6)
-
- .noargs
- move.l d7,d1
- beq.b .noerror
- moveq #0,d2
- jsr (_LVOPrintFault,a6)
-
- .noerror
- movea.l d5,a1
- movea.l d4,a6
- jsr (_LVOCloseLibrary,a6)
- move.l d6,d0
- rts
-
- _dos_name dc.b 'dos.library',0
- _template dc.b 'MIN/N',0
- dc.b '$VER: MinStack 1.1 PK',0
-
- CNOP 0,4
- _minStack dc.l 0
-
- ;************** PATCHCODE ***********************
-
- _start
- minStack dc.l 8000
-
- ;------------------------------------------------
-
- CNOP 0,4
- newCreateProc:
- cmp.l (minStack,pc),d4
- bge.b oldCreateProc
- move.l (minStack,pc),d4
- oldCreateProc
- jmp $BAD2FEED
-
- ;------------------------------------------------
-
- CNOP 0,4
- newCreateNewProc:
- tst.l d1
- bne.b .tagsok
- moveq #0,d0
- rts
- .tagsok
- movea.l d1,a0
- .findstack
- move.l #NP_StackSize,d0
- .loop
- cmp.l (a0),d0
- beq.b .found
- tst.l (a0)
- beq.b .notfound
- cmp.l #TAG_MORE,(a0)
- beq.b .more
- cmp.l #TAG_SKIP,(a0)
- beq.b .skip
- addq #ti_SIZEOF,a0
- bra.b .loop
- .more
- movea.l (ti_Data,a0),a0
- bra.b .loop
- .skip
- moveq #ti_SIZEOF,d0
- mulu (ti_Data,a0),d0
- addq #ti_SIZEOF,d0
- adda.l d0,a0
- bra.b .findstack
- .found
- move.l (ti_Data,a0),d0
- cmp.l (minStack,pc),d0
- bge.b .stackok
- .notfound
- move.l (minStack,pc),d0
- .stackok
- move.l d1, -(sp)
- move.l #TAG_MORE, -(sp)
- move.l d0, -(sp)
- move.l #NP_StackSize,-(sp)
- move.l sp,d1
- oldCreateNewProc
- jsr $BAD2FEED
- adda.w #12,sp
- move.l (sp)+,d1
- rts
-
- ;------------------------------------------------
-
- CNOP 0,4
- newRunCommand:
- cmp.l (minStack,pc),d2
- bge.b oldRunCommand
- move.l (minStack,pc),d2
- oldRunCommand
- jmp $BAD2FEED
-
- ;------------------------------------------------
-
- CNOP 0,4
- _end
-
-